博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django+xadmin打造在线教育平台(五)
阅读量:4711 次
发布时间:2019-06-10

本文共 9940 字,大约阅读时间需要 33 分钟。

 

代码

八、课程详情页功能的实现

8.1.课程列表

 (1)配置urls

MxOnline/urls中

path("course/", include('course.urls', namespace="course")),

course里面新建urls.py

# course/urls.pyfrom django.urls import path,re_pathfrom .views import CourseListView# 要写上app的名字app_name = "course"urlpatterns = [    path('list/',CourseListView.as_view(),name='course_list'),]

把course-list.html拷贝到templates目录下

from django.shortcuts import renderfrom django.views.generic import Viewclass CourseListView(View):    def get(self, request):        return render(request, "course-list.html")

 

(2)course-list.html继承base.html

修改title,修改bread里面,content里面放course-list独有的

 
course-list.html

然后去后台添加十门课程

(3)列表展示

views.py

# course/views.pyfrom django.shortcuts import renderfrom django.views.generic import Viewfrom .models import Courseclass CourseListView(View):    def get(self, request):        all_courses = Course.objects.all()        return render(request, "course-list.html",{'all_courses':all_courses})

course-list.html

{% for course in all_course %}

{
{ course.name }}

时长:{
{ course.learn_times }}
学习人数:{
{ course.students }}  
来自{
{ course.course_org.name }}
{
{ course.fav_nums }}
{% endfor %}

8.2.分页

try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)
    {% if all_courses.has_previous %}
  • 上一页
  • {% endif %} {% for page in all_courses.pages %} {% if page %} {% ifequal page all_courses.number %}
  • {
    { page }}
  • {% else %}
  • {
    { page }}
  • {% endifequal %} {% else %}
  • ...
  • {% endif %} {% endfor %} {% if all_courses.has_next %}
  • 下一页
  • {% endif %}

8.3.排序

class CourseListView(View):    def get(self, request):        all_courses = Course.objects.all().order_by('-add_time')        # 热门课程推荐        hot_courses = Course.objects.all().order_by('-click_nums')[:3]        # 排序        sort = request.GET.get('sort', "")        if sort:            if sort == "students":                all_courses = all_courses.order_by("-students")            elif sort == "hot":                all_courses = all_courses.order_by("-click_nums")        # 分页        try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)        return render(request, "course-list.html", {            "all_courses":courses,            'sort': sort,            'hot_courses':hot_courses,        })
热门课程推荐
{% for hot_course in hot_courses %}

{
{ hot_course.name }}

难度:{
{ hot_course.get_degree_display }}
{% endfor %}
 
course-list.html
 
views.py

 

8.4.课程详情

course-detail.html复制进来

 

 (1)url配置

re_path('course/(?P
\d+)/', CourseDetailView.as_view(), name="course_detail"),
class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        return  render(request, "course-detail.html", {        })

 

 在course-list.html中添加链接到详情

 

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        return  render(request, "course-detail.html", {            'course':course,        })

(3)Course model增加

  • 一个category字段
  • 一个获取章节数的方法
  • 一个获取这么课程的学习用户方法

 

 
Course

(4)course-detail.html中课程详情信息显示

{
{ course.name }}

{
{ course.desc }}
难度:{
{ course.get_degree_display }}
学习人数:{
{ course.students }}
  • 时     长:{
    { course.learn_times }}
  • 章 节 数:{
    { course.get_zj_nums }}
  • 课程类别:{
    { course.category }}
  • 学习用户: {% for user_course in course.get_learn_users %} {% endfor %}

 

 显示课程详情

 

 

8.5.授课机构 

 (1)CourseOrg model添加一个获取教师数的方法

def get_teacher_nums(self):        #获取机构的教师数        return self.teacher_set.all().count()
 
CourseOrg

(2)授课机构显示

授课机构

世界名校,课程权威

{
{ course.course_org.name }}

已收藏
  • 课  程  数:      {
    { course.course_org.course_nums }}
  • 教  师  数:      {
    { course.course_org.get_teacher_nums }}
  • 所在地区:  {
    { course.course_org.address }}
  • 认       证 :   

 

 

8.6.相关课程推荐

(1)给“Course” model添加一个“课程标签”字段

tag = models.CharField('课程标签',default='',max_length=10)
 
Course

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:3]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,        })

(3)前端

相关课程推荐
{% for relate_course in relate_courses %}

{ { relate_course.name }}

学习时长:{ { relate_course.learn_times }}
{% endfor %}

 

 

 

8.7.课程收藏和机构收藏

  {% block custom_js %}{% endblock %},放到最下面的位置,因为是js代码,要最后加载

后端判断当前收藏转态

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        has_fav_course = False        has_fav_org = False        # 必须是用户已登录我们才需要判断。        if request.user.is_authenticated:            if UserFavorite.objects.filter(user=request.user, fav_id=course.id, fav_type=1):                has_fav_course = True            if UserFavorite.objects.filter(user=request.user, fav_id=course.course_org.id, fav_type=2):                has_fav_org = True        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:2]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,            "has_fav_course": has_fav_course,            "has_fav_org": has_fav_org,        })

course-detail.html中添加Ajax

{% block custom_js %}    {% endblock %}

转载于:https://www.cnblogs.com/syq666/p/8715569.html

你可能感兴趣的文章
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
小鸡啄米问题求解
查看>>
Castle.net
查看>>
HDU1532 网络流最大流【EK算法】(模板题)
查看>>
PHP使用curl替代file_get_contents
查看>>
Webstorm通用设置
查看>>
jquery倾斜的动画导航菜单
查看>>
JAVA IO流的简单总结+收集日志异常信息
查看>>
类型转换与键盘输入
查看>>
面向对象(2)
查看>>